package cl.zeke.cursos.jsf2spring3jpa2.vista.managedbeans.ejercicio5;

import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Persona;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.services.Ejercicio5PersonaService;
import cl.zeke.cursos.jsf2spring3jpa2.util.ConstantesUtil;
import cl.zeke.java.commons.jsf2.Jsf2Util;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.persistence.NoResultException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class Ejercicio5Pag2Bean implements Serializable {

    private static Logger log = LoggerFactory.getLogger(Ejercicio5Pag2Bean.class);

    @Autowired
    private Ejercicio5PersonaService ejercicio5PersonaService;
    
    private Persona persona;
    
    @PostConstruct
    public void iniciar() {
        log.debug("iniciando ejercicio 5 página 2");
        persona = (Persona) Jsf2Util.getRequestAttribute("persona");
        if(persona != null) {
            log.debug("modo editar");
            persona = ejercicio5PersonaService.traerPersonaPorRut(persona.getRut());
        }
        else {
            log.debug("modo crear");
            persona = new Persona();
        }
    }
    
    public String guardarYVolver() {
        try {
            ejercicio5PersonaService.guardarPersona(persona);
            Jsf2Util.addInfoMessage("Se guardaron los cambios exitosamente");
            return volver();
        }catch(NoResultException ex) {
            Jsf2Util.addErrorMessage(ex.getMessage());
            return null;
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
            return null;
        }
    }
    
    public String guardar() {
        guardarYVolver();
        return null;
    }
    
    public String eliminar() {
        try {
            ejercicio5PersonaService.eliminarPersona(persona);
            Jsf2Util.addInfoMessage("Se elimino persona exitosamente");
            return volver();
        }catch(NoResultException ex) {
            Jsf2Util.addErrorMessage(ex.getMessage());
            return null;
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
            return null;
        }
    }
    
    public String volver() {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
        return "/ejercicio5/pagina1.xhtml?faces-redirect=true";
    }
    
    /* getters and setters*/
    public Persona getPersona() {
        return persona;
    }
    public void setPersona(Persona persona) {
        this.persona = persona;
    }
    
}
